package inmobiliaria.frsf.bo.impl;

import inmobiliaria.frsf.bo.ColeccionesComunesBO;
import inmobiliaria.frsf.bo.InmuebleBO;
import inmobiliaria.frsf.dao.InmuebleDAO;
import inmobiliaria.frsf.dao.impl.InmuebleDAOImpl;
import inmobiliaria.frsf.model.Inmueble;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class InmuebleBOImpl implements InmuebleBO {
	
	private InmuebleDAO inmuebleDAO = new InmuebleDAOImpl();
	private ColeccionesComunesBO coleccionesComunesBO = new ColeccionesComunesBOImpl();

	/**
	 * (non-Javadoc)
	 * 
	 * @see
	 * inmobiliaria.frsf.bo.PropietarioBO#searchPropietario(java.lang.Integer)
	 */
	public List<Inmueble> searchInmueble(String idInmueble, String idTipoInmueble, String idEstadoInmueble, String barrio, 
			String ciudad, String precioDesde, String precioHasta) throws Exception {
		Map<String, Object> datosConsulta = new HashMap<String, Object>();
		if (idInmueble != null)
			datosConsulta.put("idInmueble", idInmueble);
		
		if (idTipoInmueble != null && !idTipoInmueble.trim().isEmpty() && !idTipoInmueble.equals("-1"))
			datosConsulta.put("tipoInmueble", idTipoInmueble);		
		if (idEstadoInmueble != null && !idEstadoInmueble.trim().isEmpty() && !idEstadoInmueble.equals("-1"))
			datosConsulta.put("estado", idEstadoInmueble);
		
		if (barrio != null && !barrio.trim().isEmpty())
			datosConsulta.put("barrio", barrio.trim());		
		if (ciudad != null && !ciudad.trim().isEmpty())
			datosConsulta.put("ciudad", ciudad.trim());

		if (precioDesde != null && !precioDesde.trim().isEmpty())
			datosConsulta.put("precioDesde", precioDesde.trim());
		if (precioHasta != null && !precioHasta.trim().isEmpty())
			datosConsulta.put("precioHasta", precioHasta.trim());

		List<Inmueble> inmuebles = inmuebleDAO.searchInmueble(datosConsulta);

		return inmuebles;
	}

	public void guardar(Inmueble inmueble) throws Exception {
		Integer id_domicilio = coleccionesComunesBO.guardarDomicilio(inmueble.getDomicilio());
		Integer id_datos = inmuebleDAO.guardarDatosAdicionales(inmueble.getDatos());
		inmueble.getDomicilio().setIdDomicilio(id_domicilio);
		inmueble.getDatos().setIdDatos(id_datos);
		inmuebleDAO.guardar(inmueble);
	}
	
	/**
	 * Elimina el inmueble que posea el id pasado como parametro
	 * 
	 * @param id
	 *            Id del inmueble
	 * 
	 * @throws Exception
	 */
	public void eliminar(Integer id) throws Exception{
		inmuebleDAO.eliminar(id);
	}


	@Override
	public void guardarEdicion(Inmueble inmueble) throws Exception {
		coleccionesComunesBO.updateDomicilio(inmueble.getDomicilio());
		inmuebleDAO.editarDatosAdicionales(inmueble.getDatos());
		inmuebleDAO.guardarEdicion(inmueble);
	}
}
